Node.js এর ইভেন্ট-ড্রিভেন আর্কিটেকচার একটি গুরুত্বপূর্ণ ধারণা, যা কোডের কার্যকারিতা এবং স্কেলেবিলিটি উন্নত করতে সাহায্য করে। Node.js এ ইভেন্টস এমন একটি কনসেপ্ট যা অ্যাসিনক্রোনাস অপারেশন, যেমন HTTP সার্ভারের রিকোয়েস্ট বা টাইমারের ইভেন্ট হ্যান্ডলিং করতে ব্যবহৃত হয়। ইভেন্ট হ্যান্ডলিংয়ের জন্য Node.js এ EventEmitter ক্লাস ব্যবহৃত হয়।
১. Events এর ধারণা
ইভেন্ট একটি নির্দিষ্ট ঘটনা যা অ্যাপ্লিকেশনে ঘটে, এবং যেটি কোনো কার্যকলাপ বা ক্রিয়া ট্রিগার করতে পারে। Node.js এ ইভেন্ট ড্রিভেন আর্কিটেকচার ব্যবহৃত হয়, যেখানে বিভিন্ন কার্যকলাপ ইভেন্টের মাধ্যমে সম্পন্ন হয়। উদাহরণস্বরূপ, যখন একটি HTTP সার্ভার চালু হয়, এটি একটি 'request' ইভেন্ট তৈরি করে, এবং আপনি এই ইভেন্টটিকে ট্র্যাক করে কাস্টম কার্যকলাপ চালাতে পারেন।
ইভেন্ট সাধারণত কিছু অ্যাকশন বা ঘটনা থেকে ট্রিগার হয়, এবং এই ঘটনা বা অ্যাকশন সম্পন্ন হলে একটি ইভেন্ট হ্যান্ডলার (callback function) চালানো হয়।
২. EventEmitter Class
EventEmitter ক্লাস Node.js এর events মডিউলের অন্তর্গত। এটি Node.js এর ইভেন্ট সিস্টেমের মূল ভিত্তি এবং বিভিন্ন ইভেন্টের সাথে সংযুক্ত কার্যকলাপ হ্যান্ডল করতে ব্যবহৃত হয়।
a. EventEmitter Class এর মূল ধারণা
EventEmitter ক্লাস ইভেন্ট তৈরি এবং তার সাথে সম্পর্কিত হ্যান্ডলার (callback function) যোগ করার অনুমতি দেয়। আপনি যখন কোনো ইভেন্ট ট্রিগার করেন, তখন সেই ইভেন্টের সাথে সংযুক্ত কলব্যাক ফাংশনগুলো চালানো হয়।
b. EventEmitter Methods
EventEmitter ক্লাসে কিছু গুরুত্বপূর্ণ মেথড রয়েছে:
on(event, listener):- একটি ইভেন্টের জন্য একটি নতুন লিসনার (হ্যান্ডলার) যোগ করে।
const EventEmitter = require('events'); const emitter = new EventEmitter(); emitter.on('greet', () => { console.log('Hello, world!'); }); emitter.emit('greet'); // 'Hello, world!' দেখাবেemit(event, [arg1], [arg2], [...]):- একটি ইভেন্ট ট্রিগার করে এবং এর সাথে সংযুক্ত লিসনার ফাংশনগুলিকে কল করে।
emitter.emit('greet'); // 'Hello, world!' কল হবেonce(event, listener):- একটি ইভেন্টের জন্য শুধুমাত্র একবার লিসনার যোগ করে।
emitter.once('greetOnce', () => { console.log('This will only run once!'); }); emitter.emit('greetOnce'); // 'This will only run once!' কল হবে emitter.emit('greetOnce'); // কিছুই হবে না, কারণ এটি একবারই চালানো যাবেremoveListener(event, listener):- নির্দিষ্ট ইভেন্টের জন্য একটি লিসনার সরিয়ে দেয়।
const greetHandler = () => console.log('Greeting...'); emitter.on('greet', greetHandler); emitter.removeListener('greet', greetHandler); emitter.emit('greet'); // কিছু হবে না, কারণ লিসনার সরিয়ে ফেলা হয়েছেremoveAllListeners([event]):- একটি নির্দিষ্ট ইভেন্ট বা সমস্ত ইভেন্টের জন্য সমস্ত লিসনার সরিয়ে দেয়।
emitter.removeAllListeners('greet'); emitter.emit('greet'); // কিছু হবে না, কারণ সব লিসনার সরিয়ে ফেলা হয়েছে
৩. ইভেন্ট তৈরি এবং ব্যবহার
Node.js এ ইভেন্ট তৈরি করার জন্য EventEmitter ক্লাসের একটি উদাহরণ দেখানো হলো:
উদাহরণ: ইভেন্ট সিস্টেম ব্যবহার করা
const EventEmitter = require('events');
// একটি কাস্টম ক্লাস তৈরি করা যা EventEmitter থেকে ইন্সট্যান্স নেয়
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
// একটি 'message' নামের ইভেন্টের জন্য লিসনার যোগ করা
myEmitter.on('message', (text) => {
console.log('Received message:', text);
});
// 'message' ইভেন্ট ট্রিগার করা
myEmitter.emit('message', 'Hello, Node.js!');এখানে, message নামে একটি ইভেন্ট তৈরি করা হয়েছে এবং তার সাথে একটি কলব্যাক ফাংশন যুক্ত করা হয়েছে। যখন emit() মেথডের মাধ্যমে message ইভেন্টটি ট্রিগার করা হবে, তখন কলব্যাক ফাংশনটি চলবে এবং কনসোলে 'Received message: Hello, Node.js!' দেখাবে।
৪. ইভেন্ট-ড্রিভেন প্যাটার্ন
Node.js এর ইভেন্ট-ড্রিভেন আর্কিটেকচার বিভিন্ন অ্যাসিনক্রোনাস অপারেশনের জন্য উপযুক্ত, যেমন HTTP রিকোয়েস্ট, ফাইল অপারেশন, স্ট্রিমিং ইত্যাদি। ইভেন্ট-ড্রিভেন প্যাটার্নের মাধ্যমে Node.js দ্রুত এবং স্কেলেবল অ্যাপ্লিকেশন তৈরি করতে পারে।
উদাহরণস্বরূপ, একটি HTTP সার্ভারে ইভেন্ট ব্যবহার করা:
const http = require('http');
// সার্ভার তৈরি করা
const server = http.createServer((req, res) => {
res.write('Hello, world!');
res.end();
});
// সার্ভার ইভেন্ট ট্রিগার করা
server.on('listening', () => {
console.log('Server is listening on port 3000');
});
// 3000 পোর্টে সার্ভার শুরু করা
server.listen(3000);এখানে, listening নামে একটি ইভেন্ট ট্রিগার করা হচ্ছে, যা সার্ভার শুরু হওয়ার পর কলব্যাক ফাংশন চালাবে এবং 'Server is listening on port 3000' মেসেজটি কনসোলে দেখাবে।
সারাংশ
Node.js এর ইভেন্ট-ড্রিভেন আর্কিটেকচার এবং EventEmitter ক্লাস খুবই গুরুত্বপূর্ণ এবং শক্তিশালী। এটি ইভেন্টগুলির মাধ্যমে অ্যাসিনক্রোনাস কার্যকলাপ পরিচালনা করতে সাহায্য করে এবং আপনাকে কোডের কার্যকারিতা নিয়ন্ত্রণ করতে সক্ষম করে। EventEmitter ক্লাস ব্যবহার করে আপনি ইভেন্ট তৈরি করতে পারেন, সেগুলির সাথে কলব্যাক ফাংশন যুক্ত করতে পারেন, এবং ইভেন্টগুলো ট্রিগার করে কার্যকলাপ সম্পন্ন করতে পারেন।
Read more